[][src]Crate finql

finql

Purpose of this library is to provide over time a comprehensive toolbox for quantitative analysis of financial assets in rust. The project is licensed under Apache 2.0 or MIT license (see files LICENSE-Apache2.0 and LICENSE-MIT) at the option of the user.

The goal is to provide a toolbox for pricing various financial products, like bonds options or maybe even more complex products. In the near term, calculation of the discounted cash flow value of bonds is in the focus, based on what information is given by a standard prospect. Building blocks to achieve this target include time periods (e.g. "3M" or "10Y"), bank holiday calendars, business day adjustment rules, calculation of year fraction with respect to typical day count convention methods, roll-out of cash flows, and calculating valuation and risk figures like internal yield or duration that are useful for an investor in these products.

Functionality to calculate of figures like fair values which are primarily interesting in scenarios where one is fully hedged are not in the initial focus, since an investor is by definition not fully hedged. Nevertheless, they might be added later for comparison and estimating market prices.

The library also supports storing data, like market data, e.g. market quote information, data related to portfolio and transaction management to be able to support portfolio analysis (e.g. calculation of risk figures), and generic storage of product details (e.g. bond specification). This is done by defining data handler traits for various data categories, with concrete implementations supporting storage in memory or in a databases (supporting sqlite3 and postgreSQL).

Market data quotes can be fetched automatically from various vendors and stored into a database. Fetching the (realtime) quote or a quote history is implemented for the vendors yahoo! finance, alpha vantage, gurufocus and eodhistoricaldata. Please note that all except yahoo! finance require a user token that is only provided after registration with the service. For gurufocus, this required a paid license.

Re-exports

pub use currency::Currency;
pub use fixed_income::CashAmount;
pub use fixed_income::CashFlow;
pub use market::Market;

Modules

asset
bond

Definition of bonds and similar fixed income products and functionality to rollout cashflows and calculate basic valuation figures

calendar

Implementation of (bank) holidays. Calendars are required to verify whether an exchange is open or if a certain cash flow could be settled on a specific day. They are also needed to calculate the amount of business days between to given dates. Because of the settlement rules, bank holidays have an impact on how to rollout cash flows from fixed income products. The approach taken here is to define a set of rules to determine bank holidays. From this set of rules, a calendar is generated by calculating all bank holidays within a given range of years for fast access.

coupon_date
currency
data_handler
date_time_helper
day_adjust
day_count_conv

Implementation of day count conventions to calculate year fractions between to dates.

fixed_income
fx_rates
helpers
macros

Custom macro definitions

market
market_quotes
portfolio
postgres_handler
quote
rates
sqlite_handler
time_period

The module time_period supports time periods of different lengths in terms of day, months or years that can be added to a given date. Time periods may als be negative.

transaction

Macros

assert_fuzzy_eq

Assert macro to check whether to floats are equal within a given tolerance